library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(mgcv)
## Loading required package: nlme
##
## Attaching package: 'nlme'
## The following object is masked from 'package:dplyr':
##
## collapse
## This is mgcv 1.8-31. For overview type 'help("mgcv-package")'.
library(broom)
library(splines)
library(purrr)
### define the fine spatial grids for each GP, the spatial resolution
### will be between -2 and 2 for all dimensions for simplicity
num_fine_int <- 40
fine_grid_list <- list(
x1 = seq(-2, 2, length.out = num_fine_int+1),
x2 = seq(-2, 2, length.out = num_fine_int+1)
)
fine_grid_list
## $x1
## [1] -2.0 -1.9 -1.8 -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -1.1 -1.0 -0.9 -0.8 -0.7 -0.6
## [16] -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
## [31] 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0
##
## $x2
## [1] -2.0 -1.9 -1.8 -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -1.1 -1.0 -0.9 -0.8 -0.7 -0.6
## [16] -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
## [31] 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0
### set the true relationships per factor
### set the functional expressions
true_functions <- list(
g1 = function(x, av){av$a0 + av$a1 * cos(av$a2 * pi * x)},
g2 = function(x, av){av$a0 + av$a1 * cos(av$a2 * pi * x)}
)
### set the parameters of the functions
true_hypers <- list(
g1 = list(a0 = 0, a1 = 1, a2 = 1),
g2 = list(a0 = 0, a1 = 1, a2 = 1)
)
### define a wrapper function for executing the functions
run_factors <- function(myfunc, myx, myparams)
{
myfunc(myx, myparams)
}
### calculate each of the factors over the fine grid
fine_true_factors <- purrr::pmap(list(true_functions,
fine_grid_list,
true_hypers),
run_factors)
fine_true_factors
## $g1
## [1] 1.000000e+00 9.510565e-01 8.090170e-01 5.877853e-01 3.090170e-01
## [6] -1.836970e-16 -3.090170e-01 -5.877853e-01 -8.090170e-01 -9.510565e-01
## [11] -1.000000e+00 -9.510565e-01 -8.090170e-01 -5.877853e-01 -3.090170e-01
## [16] 6.123234e-17 3.090170e-01 5.877853e-01 8.090170e-01 9.510565e-01
## [21] 1.000000e+00 9.510565e-01 8.090170e-01 5.877853e-01 3.090170e-01
## [26] 6.123234e-17 -3.090170e-01 -5.877853e-01 -8.090170e-01 -9.510565e-01
## [31] -1.000000e+00 -9.510565e-01 -8.090170e-01 -5.877853e-01 -3.090170e-01
## [36] -1.836970e-16 3.090170e-01 5.877853e-01 8.090170e-01 9.510565e-01
## [41] 1.000000e+00
##
## $g2
## [1] 1.000000e+00 9.510565e-01 8.090170e-01 5.877853e-01 3.090170e-01
## [6] -1.836970e-16 -3.090170e-01 -5.877853e-01 -8.090170e-01 -9.510565e-01
## [11] -1.000000e+00 -9.510565e-01 -8.090170e-01 -5.877853e-01 -3.090170e-01
## [16] 6.123234e-17 3.090170e-01 5.877853e-01 8.090170e-01 9.510565e-01
## [21] 1.000000e+00 9.510565e-01 8.090170e-01 5.877853e-01 3.090170e-01
## [26] 6.123234e-17 -3.090170e-01 -5.877853e-01 -8.090170e-01 -9.510565e-01
## [31] -1.000000e+00 -9.510565e-01 -8.090170e-01 -5.877853e-01 -3.090170e-01
## [36] -1.836970e-16 3.090170e-01 5.877853e-01 8.090170e-01 9.510565e-01
## [41] 1.000000e+00
fine_true_latent_dfs <- purrr::pmap(list(fine_grid_list,
fine_true_factors,
1:2),
function(x, g, glabel){tibble::tibble(x = x, g = g) %>%
purrr::set_names(c(sprintf("x%d", glabel),
sprintf("g%d", glabel))) %>%
tibble::rowid_to_column(sprintf("x%d_id", glabel))})
fine_true_latent_dfs
## $x1
## # A tibble: 41 x 3
## x1_id x1 g1
## <int> <dbl> <dbl>
## 1 1 -2 1.00e+ 0
## 2 2 -1.9 9.51e- 1
## 3 3 -1.8 8.09e- 1
## 4 4 -1.7 5.88e- 1
## 5 5 -1.6 3.09e- 1
## 6 6 -1.5 -1.84e-16
## 7 7 -1.4 -3.09e- 1
## 8 8 -1.30 -5.88e- 1
## 9 9 -1.2 -8.09e- 1
## 10 10 -1.1 -9.51e- 1
## # … with 31 more rows
##
## $x2
## # A tibble: 41 x 3
## x2_id x2 g2
## <int> <dbl> <dbl>
## 1 1 -2 1.00e+ 0
## 2 2 -1.9 9.51e- 1
## 3 3 -1.8 8.09e- 1
## 4 4 -1.7 5.88e- 1
## 5 5 -1.6 3.09e- 1
## 6 6 -1.5 -1.84e-16
## 7 7 -1.4 -3.09e- 1
## 8 8 -1.30 -5.88e- 1
## 9 9 -1.2 -8.09e- 1
## 10 10 -1.1 -9.51e- 1
## # … with 31 more rows
### create the tensor product of the two factors
fine_latent_tensor <- expand.grid(fine_grid_list,
KEEP.OUT.ATTRS = FALSE,
stringsAsFactors = FALSE) %>%
as.data.frame() %>% tbl_df() %>%
left_join(fine_true_latent_dfs[[1]], by = "x1") %>%
left_join(fine_true_latent_dfs[[2]], by = "x2") %>%
select(ends_with("_id"), x1:x2, g1, g2) %>%
tibble::rowid_to_column("fine_id")
## Warning: `tbl_df()` is deprecated as of dplyr 1.0.0.
## Please use `tibble::as_tibble()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
fine_latent_tensor
## # A tibble: 1,681 x 7
## fine_id x1_id x2_id x1 x2 g1 g2
## <int> <int> <int> <dbl> <dbl> <dbl> <dbl>
## 1 1 1 1 -2 -2 1.00e+ 0 1
## 2 2 2 1 -1.9 -2 9.51e- 1 1
## 3 3 3 1 -1.8 -2 8.09e- 1 1
## 4 4 4 1 -1.7 -2 5.88e- 1 1
## 5 5 5 1 -1.6 -2 3.09e- 1 1
## 6 6 6 1 -1.5 -2 -1.84e-16 1
## 7 7 7 1 -1.4 -2 -3.09e- 1 1
## 8 8 8 1 -1.30 -2 -5.88e- 1 1
## 9 9 9 1 -1.2 -2 -8.09e- 1 1
## 10 10 10 1 -1.1 -2 -9.51e- 1 1
## # … with 1,671 more rows
### visualize the product of the two factors
fine_latent_tensor %>%
count(x1, x2, g1, g2) %>%
ggplot(mapping = aes(x = x1, y = x2)) +
geom_raster(mapping = aes(fill = g1 * g2)) +
coord_equal() +
scale_fill_viridis_b() +
theme_bw()
### visualize the sum of the all 2 factors
fine_latent_tensor %>%
mutate(go = g1 * g2) %>%
ggplot(mapping = aes(x = x1, y = go)) +
geom_line() +
facet_wrap(~x2, labeller = "label_both") +
theme_bw() +
theme(axis.text = element_blank())
### generate the noisy observations
sd_noise <- 0.1 # noise
set.seed(813123)
fine_df <- fine_latent_tensor %>%
mutate(go = g1 * g2,
y = rnorm(n = n(), mean = go, sd = sd_noise))
fine_df
## # A tibble: 1,681 x 9
## fine_id x1_id x2_id x1 x2 g1 g2 go y
## <int> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 1 1 -2 -2 1.00e+ 0 1 1.00e+ 0 0.994
## 2 2 2 1 -1.9 -2 9.51e- 1 1 9.51e- 1 1.07
## 3 3 3 1 -1.8 -2 8.09e- 1 1 8.09e- 1 1.03
## 4 4 4 1 -1.7 -2 5.88e- 1 1 5.88e- 1 0.640
## 5 5 5 1 -1.6 -2 3.09e- 1 1 3.09e- 1 0.369
## 6 6 6 1 -1.5 -2 -1.84e-16 1 -1.84e-16 -0.0872
## 7 7 7 1 -1.4 -2 -3.09e- 1 1 -3.09e- 1 -0.436
## 8 8 8 1 -1.30 -2 -5.88e- 1 1 -5.88e- 1 -0.348
## 9 9 9 1 -1.2 -2 -8.09e- 1 1 -8.09e- 1 -0.917
## 10 10 10 1 -1.1 -2 -9.51e- 1 1 -9.51e- 1 -1.09
## # … with 1,671 more rows
### look at the fine grid noisy data in log space
fine_df %>%
ggplot(mapping = aes(x = x1, y = y)) +
geom_point() +
facet_wrap(~x2, labeller = "label_both") +
theme_bw() +
theme(axis.text = element_blank())
fine_df %>%
ggplot(mapping = aes(x = x1, y = x2)) +
geom_raster(mapping = aes(fill = y)) +
coord_equal() +
scale_fill_viridis_b() +
theme_bw()
### work with a coarse grid instead of all of the points in the fine grid
num_coarse_int <- 20
coarse_grid_list <- list(
x1 = seq(-2, 2, length.out = num_coarse_int+1),
x2 = seq(-2, 2, length.out = num_coarse_int+1)
)
coarse_grid_list
## $x1
## [1] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8
## [16] 1.0 1.2 1.4 1.6 1.8 2.0
##
## $x2
## [1] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8
## [16] 1.0 1.2 1.4 1.6 1.8 2.0
coarse_grid <- expand.grid(coarse_grid_list,
KEEP.OUT.ATTRS = FALSE,
stringsAsFactors = FALSE) %>%
as.data.frame() %>% tbl_df()
coarse_grid
## # A tibble: 441 x 2
## x1 x2
## <dbl> <dbl>
## 1 -2 -2
## 2 -1.8 -2
## 3 -1.6 -2
## 4 -1.4 -2
## 5 -1.2 -2
## 6 -1 -2
## 7 -0.800 -2
## 8 -0.600 -2
## 9 -0.400 -2
## 10 -0.200 -2
## # … with 431 more rows
train_df <- fine_df %>%
right_join(coarse_grid, by = c("x1", "x2"))
train_df
## # A tibble: 441 x 9
## fine_id x1_id x2_id x1 x2 g1 g2 go y
## <int> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 1 1 -2 -2 1 1 1 0.994
## 2 3 3 1 -1.8 -2 0.809 1 0.809 1.03
## 3 5 5 1 -1.6 -2 0.309 1 0.309 0.369
## 4 7 7 1 -1.4 -2 -0.309 1 -0.309 -0.436
## 5 9 9 1 -1.2 -2 -0.809 1 -0.809 -0.917
## 6 11 11 1 -1 -2 -1 1 -1 -1.18
## 7 13 13 1 -0.800 -2 -0.809 1 -0.809 -0.778
## 8 15 15 1 -0.600 -2 -0.309 1 -0.309 -0.271
## 9 17 17 1 -0.400 -2 0.309 1 0.309 0.0613
## 10 19 19 1 -0.200 -2 0.809 1 0.809 0.694
## # … with 431 more rows
### look at the true latent function in the log-space with respect to x2
train_df %>%
ggplot(mapping = aes(x = x1, y = go)) +
geom_line() +
geom_point(mapping = aes(y = y), color = "red") +
facet_wrap(~ x2, labeller = "label_both") +
theme_bw() +
theme(axis.text = element_blank())
train_df %>%
ggplot(mapping = aes(x = x1, y = x2)) +
geom_raster(mapping = aes(fill = y)) +
coord_equal() +
scale_fill_viridis_b() +
theme_bw()
Interact_cosine_model <- lm(y ~ g1:g2, data = train_df)
Interact_cosine_model %>% glance()
## # A tibble: 1 x 12
## r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.966 0.966 0.0987 12661. 0 1 397. -787. -775.
## # … with 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>
model_gam_basis_linear_fit_func_interact <- function(df_1, df_2, data){
model <- lm(y ~ smoothCon(ti(x1, x2, k=c(df_1,df_2)), data = data)[[1]]$X, data = data)
metrics <- glance(model) %>% mutate(df_1 = df_1, df_2 = df_2)
return(metrics)
}
df_grid_interact<- expand.grid(x1 = 5:17, x2 = 5:17, KEEP.OUT.ATTRS = FALSE) %>% as.data.frame() %>% tbl_df()
df_grid_interact
## # A tibble: 169 x 2
## x1 x2
## <int> <int>
## 1 5 5
## 2 6 5
## 3 7 5
## 4 8 5
## 5 9 5
## 6 10 5
## 7 11 5
## 8 12 5
## 9 13 5
## 10 14 5
## # … with 159 more rows
model_comp_gam_basis_interact <- map2_dfr(df_grid_interact$x1, df_grid_interact$x2, model_gam_basis_linear_fit_func_interact, data = train_df)
model_comp_gam_basis_interact %>% arrange(AIC) %>% mutate(AIC_rank = 1:n()) %>%
ggplot(mapping = aes(x = as.factor(df_1), y= as.factor(df_2))) +
geom_tile(mapping = aes(fill = AIC)) +
geom_text(mapping = aes(label = AIC_rank), color = "white")
model_comp_gam_basis_interact %>% arrange(BIC) %>% mutate(BIC_rank = 1:n()) %>%
ggplot(mapping = aes(x = as.factor(df_1), y= as.factor(df_2))) +
geom_tile(mapping = aes(fill = BIC)) +
geom_text(mapping = aes(label = BIC_rank), color = "white")
# best model based on AIC fit
df_best_gam_basis_interact_AIC <- model_comp_gam_basis_interact%>% filter(AIC == min(AIC)) %>% select(df_1, df_2)
df_best_gam_basis_interact_AIC
## # A tibble: 1 x 2
## df_1 df_2
## <int> <int>
## 1 10 12
sm_interact_ti_AIC = smoothCon(ti(x1, x2, k=c(df_best_gam_basis_interact_AIC$df_1,df_best_gam_basis_interact_AIC$df_2)), data = train_df)[[1]]
#sm_full_ti$X
sm_interact_ti_AIC$X %>% as.data.frame() %>% tbl_df() %>%
tibble::rowid_to_column() %>%
left_join(coarse_grid %>% tibble::rowid_to_column(),
by = "rowid") %>%
tidyr::gather(key = "key", value = "value", -rowid, -x1, -x2) %>%
mutate(id = factor(key, levels = as.vector(unique(key)))) %>%
ggplot(mapping = aes(x = x1, y = x2)) +
geom_raster(mapping = aes(fill = value)) +
facet_wrap(~ id, labeller = "label_both") +
scale_fill_viridis_b() +
theme_bw()
gam_basis_linear_fit_AIC <- lm(y ~ sm_interact_ti_AIC$X, data = train_df)
gam_basis_linear_fit_AIC %>% summary()
##
## Call:
## lm(formula = y ~ sm_interact_ti_AIC$X, data = train_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.259053 -0.069192 0.001646 0.072067 0.295470
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.003359 0.005378 0.624 0.532747
## sm_interact_ti_AIC$X1 0.042500 0.076918 0.553 0.580946
## sm_interact_ti_AIC$X2 0.070537 0.072716 0.970 0.332714
## sm_interact_ti_AIC$X3 0.088326 0.076345 1.157 0.248109
## sm_interact_ti_AIC$X4 0.082429 0.074662 1.104 0.270359
## sm_interact_ti_AIC$X5 -0.079722 0.075137 -1.061 0.289428
## sm_interact_ti_AIC$X6 -0.075011 0.074718 -1.004 0.316128
## sm_interact_ti_AIC$X7 0.061323 0.075262 0.815 0.415759
## sm_interact_ti_AIC$X8 0.121801 0.075329 1.617 0.106821
## sm_interact_ti_AIC$X9 0.143949 0.074504 1.932 0.054177 .
## sm_interact_ti_AIC$X10 -0.170242 0.073307 -2.322 0.020804 *
## sm_interact_ti_AIC$X11 -0.164808 0.086454 -1.906 0.057451 .
## sm_interact_ti_AIC$X12 -0.090478 0.069956 -1.293 0.196762
## sm_interact_ti_AIC$X13 1.334798 0.066134 20.183 < 2e-16 ***
## sm_interact_ti_AIC$X14 1.603064 0.069435 23.087 < 2e-16 ***
## sm_interact_ti_AIC$X15 0.586083 0.067904 8.631 2.36e-16 ***
## sm_interact_ti_AIC$X16 -0.684833 0.068336 -10.022 < 2e-16 ***
## sm_interact_ti_AIC$X17 -0.591823 0.067955 -8.709 < 2e-16 ***
## sm_interact_ti_AIC$X18 0.504031 0.068450 7.363 1.36e-12 ***
## sm_interact_ti_AIC$X19 1.645705 0.068511 24.021 < 2e-16 ***
## sm_interact_ti_AIC$X20 1.228727 0.067761 18.133 < 2e-16 ***
## sm_interact_ti_AIC$X21 -0.099100 0.066672 -1.486 0.138101
## sm_interact_ti_AIC$X22 -0.963577 0.078629 -12.255 < 2e-16 ***
## sm_interact_ti_AIC$X23 -0.143390 0.074256 -1.931 0.054309 .
## sm_interact_ti_AIC$X24 0.751646 0.070200 10.707 < 2e-16 ***
## sm_interact_ti_AIC$X25 0.961039 0.073704 13.039 < 2e-16 ***
## sm_interact_ti_AIC$X26 0.390250 0.072079 5.414 1.16e-07 ***
## sm_interact_ti_AIC$X27 -0.528900 0.072537 -7.291 2.16e-12 ***
## sm_interact_ti_AIC$X28 -0.375482 0.072133 -5.205 3.35e-07 ***
## sm_interact_ti_AIC$X29 0.342018 0.072658 4.707 3.66e-06 ***
## sm_interact_ti_AIC$X30 1.135929 0.072723 15.620 < 2e-16 ***
## sm_interact_ti_AIC$X31 0.824435 0.071926 11.462 < 2e-16 ***
## sm_interact_ti_AIC$X32 -0.141112 0.070771 -1.994 0.046955 *
## sm_interact_ti_AIC$X33 -0.826376 0.083463 -9.901 < 2e-16 ***
## sm_interact_ti_AIC$X34 0.265108 0.072329 3.665 0.000286 ***
## sm_interact_ti_AIC$X35 -0.552549 0.068378 -8.081 1.13e-14 ***
## sm_interact_ti_AIC$X36 -0.468714 0.071791 -6.529 2.40e-10 ***
## sm_interact_ti_AIC$X37 -0.168960 0.070208 -2.407 0.016635 *
## sm_interact_ti_AIC$X38 0.397121 0.070654 5.621 3.96e-08 ***
## sm_interact_ti_AIC$X39 0.308802 0.070260 4.395 1.48e-05 ***
## sm_interact_ti_AIC$X40 -0.153011 0.070772 -2.162 0.031311 *
## sm_interact_ti_AIC$X41 -0.543646 0.070835 -7.675 1.76e-13 ***
## sm_interact_ti_AIC$X42 -0.392878 0.070059 -5.608 4.24e-08 ***
## sm_interact_ti_AIC$X43 0.101298 0.068934 1.469 0.142620
## sm_interact_ti_AIC$X44 0.442306 0.081296 5.441 1.02e-07 ***
## sm_interact_ti_AIC$X45 0.060353 0.073336 0.823 0.411098
## sm_interact_ti_AIC$X46 -0.476753 0.069330 -6.877 2.94e-11 ***
## sm_interact_ti_AIC$X47 -0.593973 0.072790 -8.160 6.52e-15 ***
## sm_interact_ti_AIC$X48 -0.193062 0.071185 -2.712 0.007025 **
## sm_interact_ti_AIC$X49 0.221094 0.071638 3.086 0.002193 **
## sm_interact_ti_AIC$X50 0.272940 0.071238 3.831 0.000152 ***
## sm_interact_ti_AIC$X51 -0.252620 0.071757 -3.520 0.000489 ***
## sm_interact_ti_AIC$X52 -0.601752 0.071821 -8.378 1.42e-15 ***
## sm_interact_ti_AIC$X53 -0.423919 0.071035 -5.968 6.03e-09 ***
## sm_interact_ti_AIC$X54 0.045911 0.069893 0.657 0.511707
## sm_interact_ti_AIC$X55 0.269727 0.082428 3.272 0.001176 **
## sm_interact_ti_AIC$X56 0.054096 0.072840 0.743 0.458195
## sm_interact_ti_AIC$X57 0.668121 0.068861 9.703 < 2e-16 ***
## sm_interact_ti_AIC$X58 0.930226 0.072298 12.867 < 2e-16 ***
## sm_interact_ti_AIC$X59 0.336051 0.070704 4.753 2.96e-06 ***
## sm_interact_ti_AIC$X60 -0.351905 0.071153 -4.946 1.19e-06 ***
## sm_interact_ti_AIC$X61 -0.430378 0.070757 -6.083 3.18e-09 ***
## sm_interact_ti_AIC$X62 0.427392 0.071272 5.997 5.13e-09 ***
## sm_interact_ti_AIC$X63 1.156448 0.071335 16.211 < 2e-16 ***
## sm_interact_ti_AIC$X64 0.740014 0.070554 10.489 < 2e-16 ***
## sm_interact_ti_AIC$X65 -0.184663 0.069420 -2.660 0.008181 **
## sm_interact_ti_AIC$X66 -0.513212 0.081871 -6.269 1.10e-09 ***
## sm_interact_ti_AIC$X67 -0.200106 0.072339 -2.766 0.005980 **
## sm_interact_ti_AIC$X68 1.188924 0.068387 17.385 < 2e-16 ***
## sm_interact_ti_AIC$X69 1.612993 0.071800 22.465 < 2e-16 ***
## sm_interact_ti_AIC$X70 0.530413 0.070217 7.554 3.92e-13 ***
## sm_interact_ti_AIC$X71 -0.746693 0.070664 -10.567 < 2e-16 ***
## sm_interact_ti_AIC$X72 -0.726324 0.070270 -10.336 < 2e-16 ***
## sm_interact_ti_AIC$X73 0.468886 0.070782 6.624 1.36e-10 ***
## sm_interact_ti_AIC$X74 1.545658 0.070845 21.817 < 2e-16 ***
## sm_interact_ti_AIC$X75 1.284259 0.070069 18.329 < 2e-16 ***
## sm_interact_ti_AIC$X76 -0.238826 0.068943 -3.464 0.000600 ***
## sm_interact_ti_AIC$X77 -1.031806 0.081307 -12.690 < 2e-16 ***
## sm_interact_ti_AIC$X78 0.059235 0.072074 0.822 0.411729
## sm_interact_ti_AIC$X79 0.089867 0.068137 1.319 0.188078
## sm_interact_ti_AIC$X80 0.173549 0.071537 2.426 0.015785 *
## sm_interact_ti_AIC$X81 -0.020180 0.069960 -0.288 0.773182
## sm_interact_ti_AIC$X82 -0.066324 0.070405 -0.942 0.346843
## sm_interact_ti_AIC$X83 -0.062751 0.070013 -0.896 0.370736
## sm_interact_ti_AIC$X84 0.029614 0.070522 0.420 0.674804
## sm_interact_ti_AIC$X85 0.272070 0.070585 3.854 0.000139 ***
## sm_interact_ti_AIC$X86 0.117826 0.069812 1.688 0.092373 .
## sm_interact_ti_AIC$X87 -0.063635 0.068690 -0.926 0.354889
## sm_interact_ti_AIC$X88 -0.255935 0.081010 -3.159 0.001723 **
## sm_interact_ti_AIC$X89 0.089452 0.088732 1.008 0.314115
## sm_interact_ti_AIC$X90 -0.776423 0.083885 -9.256 < 2e-16 ***
## sm_interact_ti_AIC$X91 -1.082152 0.088071 -12.287 < 2e-16 ***
## sm_interact_ti_AIC$X92 -0.344138 0.086130 -3.996 7.91e-05 ***
## sm_interact_ti_AIC$X93 0.613173 0.086677 7.074 8.58e-12 ***
## sm_interact_ti_AIC$X94 0.314372 0.086194 3.647 0.000306 ***
## sm_interact_ti_AIC$X95 -0.294133 0.086822 -3.388 0.000787 ***
## sm_interact_ti_AIC$X96 -1.111112 0.086899 -12.786 < 2e-16 ***
## sm_interact_ti_AIC$X97 -0.697008 0.085947 -8.110 9.24e-15 ***
## sm_interact_ti_AIC$X98 -0.023152 0.084566 -0.274 0.784428
## sm_interact_ti_AIC$X99 0.701096 0.099733 7.030 1.13e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1129 on 341 degrees of freedom
## Multiple R-squared: 0.9659, Adjusted R-squared: 0.956
## F-statistic: 97.52 on 99 and 341 DF, p-value: < 2.2e-16
coefplot::coefplot(gam_basis_linear_fit_AIC) + theme_bw()
df_best_gam_basis_interact_BIC <- model_comp_gam_basis_interact%>% filter(BIC == min(BIC)) %>% select(df_1, df_2)
df_best_gam_basis_interact_BIC
## # A tibble: 1 x 2
## df_1 df_2
## <int> <int>
## 1 9 9
sm_interact_ti_BIC = smoothCon(ti(x1, x2, k=c(df_best_gam_basis_interact_BIC$df_1,df_best_gam_basis_interact_BIC$df_2)), data = train_df)[[1]]
#sm_full_ti$X
sm_interact_ti_BIC$X %>% as.data.frame() %>% tbl_df() %>%
tibble::rowid_to_column() %>%
left_join(coarse_grid %>% tibble::rowid_to_column(),
by = "rowid") %>%
tidyr::gather(key = "key", value = "value", -rowid, -x1, -x2) %>%
mutate(id = factor(key, levels = as.vector(unique(key)))) %>%
ggplot(mapping = aes(x = x1, y = x2)) +
geom_raster(mapping = aes(fill = value)) +
facet_wrap(~ id, labeller = "label_both") +
scale_fill_viridis_b() +
theme_bw()
gam_basis_linear_fit_BIC <- lm(y ~ sm_interact_ti_BIC$X, data = train_df)
gam_basis_linear_fit_BIC %>% summary()
##
## Call:
## lm(formula = y ~ sm_interact_ti_BIC$X, data = train_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.253246 -0.079245 -0.000319 0.078760 0.312853
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.003359 0.005761 0.583 0.560242
## sm_interact_ti_BIC$X1 0.167204 0.072713 2.300 0.022024 *
## sm_interact_ti_BIC$X2 0.359502 0.064661 5.560 5.13e-08 ***
## sm_interact_ti_BIC$X3 0.129840 0.069247 1.875 0.061565 .
## sm_interact_ti_BIC$X4 -0.179125 0.067146 -2.668 0.007968 **
## sm_interact_ti_BIC$X5 0.092952 0.068312 1.361 0.174424
## sm_interact_ti_BIC$X6 0.454562 0.066920 6.793 4.32e-11 ***
## sm_interact_ti_BIC$X7 0.015792 0.067651 0.233 0.815550
## sm_interact_ti_BIC$X8 -0.320532 0.084612 -3.788 0.000177 ***
## sm_interact_ti_BIC$X9 0.528329 0.064661 8.171 4.72e-15 ***
## sm_interact_ti_BIC$X10 1.964099 0.057501 34.158 < 2e-16 ***
## sm_interact_ti_BIC$X11 0.435848 0.061579 7.078 7.22e-12 ***
## sm_interact_ti_BIC$X12 -0.838347 0.059711 -14.040 < 2e-16 ***
## sm_interact_ti_BIC$X13 0.455031 0.060747 7.491 4.94e-13 ***
## sm_interact_ti_BIC$X14 1.930631 0.059510 32.442 < 2e-16 ***
## sm_interact_ti_BIC$X15 0.527121 0.060160 8.762 < 2e-16 ***
## sm_interact_ti_BIC$X16 -1.136836 0.075242 -15.109 < 2e-16 ***
## sm_interact_ti_BIC$X17 0.128753 0.069247 1.859 0.063763 .
## sm_interact_ti_BIC$X18 0.364187 0.061579 5.914 7.50e-09 ***
## sm_interact_ti_BIC$X19 0.151388 0.065947 2.296 0.022248 *
## sm_interact_ti_BIC$X20 -0.162536 0.063946 -2.542 0.011430 *
## sm_interact_ti_BIC$X21 0.155776 0.065056 2.394 0.017133 *
## sm_interact_ti_BIC$X22 0.564252 0.063731 8.854 < 2e-16 ***
## sm_interact_ti_BIC$X23 0.081825 0.064427 1.270 0.204856
## sm_interact_ti_BIC$X24 -0.357090 0.080579 -4.432 1.23e-05 ***
## sm_interact_ti_BIC$X25 -0.186557 0.067146 -2.778 0.005738 **
## sm_interact_ti_BIC$X26 -0.908138 0.059711 -15.209 < 2e-16 ***
## sm_interact_ti_BIC$X27 -0.172732 0.063946 -2.701 0.007221 **
## sm_interact_ti_BIC$X28 0.470931 0.062006 7.595 2.47e-13 ***
## sm_interact_ti_BIC$X29 -0.244964 0.063082 -3.883 0.000122 ***
## sm_interact_ti_BIC$X30 -0.978698 0.061797 -15.837 < 2e-16 ***
## sm_interact_ti_BIC$X31 -0.165715 0.062472 -2.653 0.008325 **
## sm_interact_ti_BIC$X32 0.555098 0.078134 7.104 6.10e-12 ***
## sm_interact_ti_BIC$X33 0.152059 0.068312 2.226 0.026609 *
## sm_interact_ti_BIC$X34 0.294787 0.060747 4.853 1.79e-06 ***
## sm_interact_ti_BIC$X35 0.107356 0.065056 1.650 0.099736 .
## sm_interact_ti_BIC$X36 -0.168648 0.063082 -2.673 0.007835 **
## sm_interact_ti_BIC$X37 0.130884 0.064177 2.039 0.042107 *
## sm_interact_ti_BIC$X38 0.541178 0.062869 8.608 < 2e-16 ***
## sm_interact_ti_BIC$X39 0.007874 0.063556 0.124 0.901470
## sm_interact_ti_BIC$X40 -0.234192 0.079490 -2.946 0.003418 **
## sm_interact_ti_BIC$X41 0.451007 0.066920 6.739 5.99e-11 ***
## sm_interact_ti_BIC$X42 1.870396 0.059510 31.430 < 2e-16 ***
## sm_interact_ti_BIC$X43 0.442466 0.063731 6.943 1.70e-11 ***
## sm_interact_ti_BIC$X44 -0.893327 0.061797 -14.456 < 2e-16 ***
## sm_interact_ti_BIC$X45 0.396568 0.062869 6.308 7.96e-10 ***
## sm_interact_ti_BIC$X46 1.921517 0.061589 31.199 < 2e-16 ***
## sm_interact_ti_BIC$X47 0.409775 0.062261 6.582 1.57e-10 ***
## sm_interact_ti_BIC$X48 -1.090251 0.077871 -14.001 < 2e-16 ***
## sm_interact_ti_BIC$X49 0.114357 0.067651 1.690 0.091782 .
## sm_interact_ti_BIC$X50 0.432046 0.060160 7.182 3.72e-12 ***
## sm_interact_ti_BIC$X51 0.036840 0.064427 0.572 0.567797
## sm_interact_ti_BIC$X52 -0.201191 0.062472 -3.220 0.001391 **
## sm_interact_ti_BIC$X53 0.064322 0.063556 1.012 0.312163
## sm_interact_ti_BIC$X54 0.505540 0.062261 8.120 6.76e-15 ***
## sm_interact_ti_BIC$X55 0.069103 0.062942 1.098 0.272957
## sm_interact_ti_BIC$X56 -0.417555 0.078721 -5.304 1.94e-07 ***
## sm_interact_ti_BIC$X57 -0.246364 0.084612 -2.912 0.003809 **
## sm_interact_ti_BIC$X58 -1.214235 0.075242 -16.138 < 2e-16 ***
## sm_interact_ti_BIC$X59 -0.195914 0.080579 -2.431 0.015510 *
## sm_interact_ti_BIC$X60 0.577106 0.078134 7.386 9.84e-13 ***
## sm_interact_ti_BIC$X61 -0.304493 0.079490 -3.831 0.000150 ***
## sm_interact_ti_BIC$X62 -1.116641 0.077871 -14.340 < 2e-16 ***
## sm_interact_ti_BIC$X63 -0.332273 0.078721 -4.221 3.05e-05 ***
## sm_interact_ti_BIC$X64 0.715192 0.098457 7.264 2.18e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.121 on 376 degrees of freedom
## Multiple R-squared: 0.9568, Adjusted R-squared: 0.9495
## F-statistic: 130.3 on 64 and 376 DF, p-value: < 2.2e-16
coefplot::coefplot(gam_basis_linear_fit_BIC) + theme_bw()
gam_fit_func_interact <- function(df_1, df_2, data){
model <- gam(y ~ ti(x1, x2, k=c(df_1,df_2)), data = data, method = 'REML')
metrics <- glance(model) %>% mutate(df_1 = df_1, df_2 = df_2)
return(metrics)
}
gam_model_comp_interact <- map2_dfr(df_grid_interact$x1, df_grid_interact$x2, gam_fit_func_interact, data = train_df)
gam_model_comp_interact %>% arrange(AIC) %>% mutate(AIC_rank = 1:n()) %>%
ggplot(mapping = aes(x = as.factor(df_1), y= as.factor(df_2))) +
geom_tile(mapping = aes(fill = AIC)) +
geom_text(mapping = aes(label = AIC_rank), color = "white")
gam_model_comp_interact %>% arrange(BIC) %>% mutate(BIC_rank = 1:n()) %>%
ggplot(mapping = aes(x = as.factor(df_1), y= as.factor(df_2))) +
geom_tile(mapping = aes(fill = BIC)) +
geom_text(mapping = aes(label = BIC_rank), color = "white")
gam_best_AIC_model_interact <- gam_model_comp_interact%>% filter(AIC == min(AIC)) %>% select(df_1, df_2)
gam_best_AIC_model_interact
## # A tibble: 1 x 2
## df_1 df_2
## <int> <int>
## 1 16 12
gam_best_model_fit_interact_ti_AIC <- gam(y ~ ti(x1, x2, k=c(gam_best_AIC_model_interact$df_1[1],gam_best_AIC_model_interact$df_2[1])), data = train_df, method = 'REML')
summary(gam_best_model_fit_interact_ti_AIC)
##
## Family: gaussian
## Link function: identity
##
## Formula:
## y ~ ti(x1, x2, k = c(gam_best_AIC_model_interact$df_1[1], gam_best_AIC_model_interact$df_2[1]))
##
## Parametric coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.003359 0.005120 0.656 0.512
##
## Approximate significance of smooth terms:
## edf Ref.df F p-value
## ti(x1,x2) 129.3 150.7 70.23 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## R-sq.(adj) = 0.96 Deviance explained = 97.2%
## -REML = -157.82 Scale est. = 0.011561 n = 441
gam_best_model_fit_interact_ti_AIC
##
## Family: gaussian
## Link function: identity
##
## Formula:
## y ~ ti(x1, x2, k = c(gam_best_AIC_model_interact$df_1[1], gam_best_AIC_model_interact$df_2[1]))
##
## Estimated degrees of freedom:
## 129 total = 130.33
##
## REML score: -157.8209
gam_best_BIC_model_interact <- gam_model_comp_interact%>% filter(BIC == min(BIC)) %>% select(df_1, df_2)
gam_best_BIC_model_interact
## # A tibble: 1 x 2
## df_1 df_2
## <int> <int>
## 1 9 9
gam_best_model_fit_interact_ti_BIC <- gam(y ~ ti(x1, x2, k=c(gam_best_BIC_model_interact$df_1[1],gam_best_BIC_model_interact$df_2[1])), data = train_df, method = 'REML')
summary(gam_best_model_fit_interact_ti_BIC)
##
## Family: gaussian
## Link function: identity
##
## Formula:
## y ~ ti(x1, x2, k = c(gam_best_BIC_model_interact$df_1[1], gam_best_BIC_model_interact$df_2[1]))
##
## Parametric coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.003359 0.005753 0.584 0.56
##
## Approximate significance of smooth terms:
## edf Ref.df F p-value
## ti(x1,x2) 62.09 63.88 129.9 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## R-sq.(adj) = 0.95 Deviance explained = 95.7%
## -REML = -162.76 Scale est. = 0.014596 n = 441
gam_best_model_fit_interact_ti_BIC
##
## Family: gaussian
## Link function: identity
##
## Formula:
## y ~ ti(x1, x2, k = c(gam_best_BIC_model_interact$df_1[1], gam_best_BIC_model_interact$df_2[1]))
##
## Estimated degrees of freedom:
## 62.1 total = 63.09
##
## REML score: -162.7627
model_fit_func_interact <- function(df_1, df_2, data){
model <- lm(y ~ ns(x1, df = df_1):ns(x2, df=df_2), data = data)
metrics <- glance(model) %>% mutate(df_1 = df_1, df_2 = df_2)
return(metrics)
}
model_comp_df_interact <- map2_dfr(df_grid_interact$x1, df_grid_interact$x2, model_fit_func_interact, data = train_df)
model_comp_df_interact %>% arrange(AIC) %>% mutate(AIC_rank = 1:n()) %>%
ggplot(mapping = aes(x = as.factor(df_1), y= as.factor(df_2))) +
geom_tile(mapping = aes(fill = AIC)) +
geom_text(mapping = aes(label = AIC_rank), color = "white")
model_comp_df_interact %>% arrange(BIC) %>% mutate(BIC_rank = 1:n()) %>%
ggplot(mapping = aes(x = as.factor(df_1), y= as.factor(df_2))) +
geom_tile(mapping = aes(fill = BIC)) +
geom_text(mapping = aes(label = BIC_rank), color = "white")
df_best_AIC_model_interact <- model_comp_df_interact%>% filter(AIC == min(AIC)) %>% select(df_1, df_2)
df_best_AIC_model_interact
## # A tibble: 1 x 2
## df_1 df_2
## <int> <int>
## 1 8 11
best_AIC_fit_interact <- lm(y ~ ns(x1, df = df_best_AIC_model_interact$df_1[1]):ns(x2, df=df_best_AIC_model_interact$df_2[1]), data = train_df)
best_AIC_fit_interact %>% summary()
##
## Call:
## lm(formula = y ~ ns(x1, df = df_best_AIC_model_interact$df_1[1]):ns(x2,
## df = df_best_AIC_model_interact$df_2[1]), data = train_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.19239 -0.07941 0.00179 0.08745 1.04562
##
## Coefficients:
## Estimate
## (Intercept) 0.0145248
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 1.5923518
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 -0.1495582
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 -1.1465002
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.1316674
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.9896327
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 -0.0548842
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 -1.1370929
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 -0.2301702
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 2.2148064
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 -0.1830021
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 -1.6969149
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 -0.1762000
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 2.0372040
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 -0.0346329
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 -1.9988974
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 -0.5077348
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.7858809
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.1513618
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 -0.7907491
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.0756874
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.7584032
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 -0.1950726
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 -0.7820500
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 -0.4068627
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 -2.2467959
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 -0.1721373
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 1.7027928
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 -0.0977259
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 -1.8157812
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.0451531
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 1.9294741
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.8334425
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 -1.8222899
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.0643066
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 1.6544218
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 -0.1411270
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 -1.7245369
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.2847958
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 1.4405875
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.1764955
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.4321969
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.0712281
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 -0.8686859
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.2545310
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.4882282
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 -0.1258275
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 -0.3788741
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 -0.0721818
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 2.4585815
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.3424413
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 -2.4467624
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.4641626
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 2.0125115
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.0918826
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 -2.3143840
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 -0.6969845
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.6741194
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 -0.1369626
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 -0.5869027
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 -0.1940311
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.7398458
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 -0.1423476
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 -0.4909828
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 -0.1035307
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 -0.8046263
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 -0.1486470
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 1.1472652
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 -0.1908169
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 -0.9467497
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.1791451
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.4824146
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.2570256
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 -4.0832546
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 -0.0765254
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 3.2383625
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 -0.0648256
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 -3.2130041
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 0.1960887
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 3.3769507
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 0.8078839
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 -0.1463986
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 -0.1440769
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.3972607
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 -0.0007138
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 -0.1195236
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 -0.2005818
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.3639963
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.2670634
## Std. Error
## (Intercept) 0.0414759
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.6358891
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.6289458
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.6984035
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.6317003
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.6482901
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.6383700
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.5602950
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.5531943
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.6004440
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.5946881
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.6596638
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.5970595
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.6125581
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.6026833
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.5344809
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.5219319
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.5897823
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.5837834
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.6478686
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.5862117
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.6015069
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.5920264
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.5226604
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.5128484
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.5871841
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.5814213
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.6450643
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.5837788
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.5989629
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.5893912
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.5217746
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.5104773
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.5871876
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.5813169
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.6450426
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.5837053
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.5989120
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.5894087
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.5210490
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.5105379
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.5902162
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.5843597
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.6483802
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.5867477
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.6020236
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.5924430
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.5240368
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.5131475
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.6015484
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.5955030
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.6608110
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.5979588
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.6135439
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.6038279
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.5335818
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.5230407
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.6412328
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.6346551
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.7043732
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.6373111
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.6539521
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.6436799
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.5678792
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.5576172
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.5859438
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.5795270
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.6435436
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.5820706
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.5973613
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.5882323
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.5161592
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.5097542
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 0.5276317
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 0.5275235
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 0.5808507
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 0.5281931
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 0.5407843
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 0.5289564
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 0.5020620
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 0.4559780
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.4983571
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.4924056
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.5472297
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.4947107
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.5078185
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.5003671
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.4356346
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.4338191
## t value
## (Intercept) 0.350
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 2.504
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 -0.238
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 -1.642
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.208
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 1.527
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 -0.086
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 -2.029
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 -0.416
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 3.689
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 -0.308
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 -2.572
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 -0.295
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 3.326
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 -0.057
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 -3.740
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 -0.973
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 1.332
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.259
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 -1.221
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.129
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 1.261
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 -0.329
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 -1.496
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 -0.793
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 -3.826
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 -0.296
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 2.640
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 -0.167
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 -3.032
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.077
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 3.698
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 1.633
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 -3.103
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.111
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 2.565
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 -0.242
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 -2.879
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.483
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 2.765
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.346
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.732
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.122
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 -1.340
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.434
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.811
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 -0.212
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 -0.723
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 -0.141
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 4.087
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.575
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 -3.703
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.776
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 3.280
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.152
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 -4.337
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 -1.333
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 1.051
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 -0.216
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 -0.833
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 -0.304
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 1.131
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 -0.221
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 -0.865
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 -0.186
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 -1.373
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 -0.256
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 1.783
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 -0.328
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 -1.585
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.305
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.935
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.504
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 -7.739
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 -0.145
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 5.575
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 -0.123
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 -5.941
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 0.371
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 6.726
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 1.772
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 -0.294
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 -0.293
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.726
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 -0.001
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 -0.235
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 -0.401
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.836
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.616
## Pr(>|t|)
## (Intercept) 0.726400
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.012727
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.812181
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.101566
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.835011
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.127777
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.931535
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.043164
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 0.677609
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.000261
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.758471
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.010509
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.768082
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.000975
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.954208
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.000215
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 0.331321
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.183560
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.795573
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.223077
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.897342
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.208202
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.741974
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.135475
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])3 0.428115
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.000154
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.767357
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.008666
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.867150
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.002613
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.938978
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.000252
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 0.103432
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.002068
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.911979
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.010737
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.809093
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.004227
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.629262
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.005996
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 0.729771
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.464492
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.903055
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.181182
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.664700
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.417926
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.831928
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.470165
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])6 0.888215
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 5.42e-05
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.565628
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.000248
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.438125
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.001141
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.879143
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 1.89e-05
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 0.183537
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.293848
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.829264
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.405282
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.760963
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.258680
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.825106
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.387853
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])8 0.852813
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.170560
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.797717
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.075492
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.743239
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.113890
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.760890
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.350623
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 0.614426
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 1.07e-13
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 0.884742
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 4.93e-08
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 0.902390
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 6.79e-09
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 0.711078
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 7.06e-11
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 0.077299
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.769112
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.770002
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.468353
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.998850
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.814061
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.688760
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.403973
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])11 0.538550
##
## (Intercept)
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 *
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])1
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])1
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])1
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])1
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])1
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])1 *
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])1
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 ***
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])2
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 *
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])2
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 ***
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])2
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])2 ***
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])2
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])3
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])3
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])3
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])3
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])3
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])3
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])3
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])3
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 ***
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])4
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 **
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])4
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 **
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])4
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])4 ***
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])4
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 **
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])5
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 *
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])5
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 **
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])5
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])5 **
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])5
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])6
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])6
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])6
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])6
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])6
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])6
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])6
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])6
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 ***
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])7
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 ***
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])7
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 **
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])7
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])7 ***
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])7
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])8
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])8
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])8
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])8
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])8
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])8
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])8
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])8
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])9
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])9
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])9 .
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])9
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])9
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])9
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])9
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])9
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 ***
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])10
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 ***
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])10
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 ***
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])10
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 ***
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])10 .
## ns(x1, df = df_best_AIC_model_interact$df_1[1])1:ns(x2, df = df_best_AIC_model_interact$df_2[1])11
## ns(x1, df = df_best_AIC_model_interact$df_1[1])2:ns(x2, df = df_best_AIC_model_interact$df_2[1])11
## ns(x1, df = df_best_AIC_model_interact$df_1[1])3:ns(x2, df = df_best_AIC_model_interact$df_2[1])11
## ns(x1, df = df_best_AIC_model_interact$df_1[1])4:ns(x2, df = df_best_AIC_model_interact$df_2[1])11
## ns(x1, df = df_best_AIC_model_interact$df_1[1])5:ns(x2, df = df_best_AIC_model_interact$df_2[1])11
## ns(x1, df = df_best_AIC_model_interact$df_1[1])6:ns(x2, df = df_best_AIC_model_interact$df_2[1])11
## ns(x1, df = df_best_AIC_model_interact$df_1[1])7:ns(x2, df = df_best_AIC_model_interact$df_2[1])11
## ns(x1, df = df_best_AIC_model_interact$df_1[1])8:ns(x2, df = df_best_AIC_model_interact$df_2[1])11
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2783 on 352 degrees of freedom
## Multiple R-squared: 0.7863, Adjusted R-squared: 0.7328
## F-statistic: 14.71 on 88 and 352 DF, p-value: < 2.2e-16
coefplot::coefplot(best_AIC_fit_interact) + theme_bw()
### interaction effects on the coarse grid
model.matrix( ~ ns(x1, df = df_best_AIC_model_interact$df_1[1]):ns(x2, df=df_best_AIC_model_interact$df_2[1]), train_df) %>%
as.data.frame() %>% tibble::as_tibble() %>%
select(-`(Intercept)`) %>%
tibble::rowid_to_column() %>%
left_join(coarse_grid %>% tibble::rowid_to_column(),
by = "rowid") %>%
tidyr::gather(key = "key", value = "value", -rowid, -x1, -x2) %>%
tidyr::separate(key,
c("left_word", "right_word"),
sep = ":",
fill = "right",
remove = FALSE) %>%
filter(!is.na(right_word)) %>%
tidyr::separate(left_word,
c("ns_x1_word", "x1_s_id"),
sep = "\\)",
remove = FALSE) %>%
tidyr::separate(right_word,
c("ns_x2_word", "x2_s_id"),
sep = "\\)",
remove = FALSE) %>%
ggplot(mapping = aes(x = x1, y = x2)) +
geom_raster(mapping = aes(fill = value)) +
facet_grid(x1_s_id ~ x2_s_id, labeller = "label_both") +
scale_fill_viridis_b() +
theme_bw()
df_best_BIC_model_interact <- model_comp_df_interact%>% filter(BIC == min(BIC)) %>% select(df_1, df_2)
df_best_BIC_model_interact
## # A tibble: 1 x 2
## df_1 df_2
## <int> <int>
## 1 8 8
best_BIC_fit_interact <- lm(y ~ ns(x1, df = df_best_BIC_model_interact$df_1[1]):ns(x2, df=df_best_BIC_model_interact$df_2[1]), data = train_df)
best_BIC_fit_interact %>% summary()
##
## Call:
## lm(formula = y ~ ns(x1, df = df_best_BIC_model_interact$df_1[1]):ns(x2,
## df = df_best_BIC_model_interact$df_2[1]), data = train_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.18944 -0.09591 0.00095 0.09900 1.04857
##
## Coefficients:
## Estimate
## (Intercept) 0.0115758
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 3.8928251
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 -0.2282850
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 -2.8207020
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 -0.1383565
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 3.1985932
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 -0.0983347
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 -3.2732683
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 -0.8426895
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 -0.3507640
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.1325802
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 -0.0697339
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.0897294
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 -0.0349953
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 -0.1971425
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.1468833
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 -0.0224461
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 -2.8916369
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 -0.1741504
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 2.5965267
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 -0.2551127
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 -2.5984828
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 0.2841755
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 2.5168832
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 0.8210287
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.0117640
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.1597719
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 -0.3523126
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.2026739
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 -0.0003992
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.0196352
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 -0.1360107
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 -0.1894912
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 2.9069133
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.2768486
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 -2.9616996
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.4635208
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 2.5884432
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 -0.0876292
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 -2.5253568
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 -0.6690036
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 -0.1144000
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 -0.2065090
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.5567496
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 -0.4035671
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 -0.2318753
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.0913081
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 -0.0475657
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.0464544
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 -3.2214943
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 -0.1466516
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 2.6369996
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 -0.0120050
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 -2.7063507
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 0.1574008
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 2.7784511
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 0.7285096
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 -0.7355658
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 -0.0924275
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.8569092
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 -0.0653326
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 -0.4999190
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 -0.1237863
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.7143756
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.3073630
## Std. Error
## (Intercept) 0.0411691
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 0.5157131
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 0.5102193
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 0.5664455
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 0.5124138
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 0.5258397
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 0.5177074
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 0.4553383
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 0.4485735
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.5102193
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.5058981
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.5606760
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.5077499
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.5208011
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.5120484
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.4579938
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.4432003
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 0.5664455
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 0.5606760
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 0.6222316
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 0.5630105
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 0.5777021
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 0.5686019
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 0.5019250
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 0.4925601
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.5124138
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.5077499
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.5630105
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.5097025
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.5228773
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.5142927
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.4577905
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.4452798
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.5258397
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.5208011
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.5777021
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.5228773
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.5364497
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.5278005
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.4680868
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.4570815
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.5177074
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.5120484
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.5686019
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.5142927
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.5278005
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.5197280
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.4561213
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.4503849
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 0.4553383
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 0.4579938
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 0.5019250
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 0.4577905
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 0.4680868
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 0.4561213
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 0.4504753
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 0.3920051
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.4485735
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.4432003
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.4925601
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.4452798
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.4570815
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.4503849
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.3920051
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.3904912
## t value
## (Intercept) 0.281
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 7.548
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 -0.447
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 -4.980
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 -0.270
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 6.083
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 -0.190
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 -7.189
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 -1.879
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 -0.687
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.262
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 -0.124
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.177
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 -0.067
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 -0.385
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.321
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 -0.051
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 -5.105
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 -0.311
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 4.173
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 -0.453
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 -4.498
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 0.500
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 5.014
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 1.667
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.023
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.315
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 -0.626
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.398
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 -0.001
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.038
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 -0.297
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 -0.426
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 5.528
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.532
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 -5.127
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.886
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 4.825
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 -0.166
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 -5.395
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 -1.464
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 -0.221
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 -0.403
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.979
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 -0.785
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 -0.439
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.176
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 -0.104
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.103
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 -7.075
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 -0.320
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 5.254
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 -0.026
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 -5.782
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 0.345
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 6.168
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 1.858
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 -1.640
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 -0.209
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 1.740
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 -0.147
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 -1.094
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 -0.275
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 1.822
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.787
## Pr(>|t|)
## (Intercept) 0.7787
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 3.36e-13
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 0.6548
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 9.73e-07
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 0.7873
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 2.91e-09
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 0.8495
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 3.55e-12
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 0.0611
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.4922
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.7934
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.9011
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.8598
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.9465
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.7004
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.7486
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])2 0.9596
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 5.27e-07
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 0.7563
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 3.74e-05
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 0.6507
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 9.16e-06
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 0.6175
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 8.21e-07
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 0.0964
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.9817
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.7532
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.5318
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.6911
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.9994
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.9696
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.7666
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])4 0.6707
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 6.06e-08
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.5953
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 4.73e-07
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.3759
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 2.04e-06
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.8682
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 1.21e-07
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 0.1441
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.8252
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.6870
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.3281
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.4331
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.6607
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.8606
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.9170
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])6 0.9179
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 7.36e-12
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 0.7490
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 2.50e-07
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 0.9791
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 1.56e-08
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 0.7302
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 1.79e-09
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 0.0639
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.1019
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.8349
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.0827
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.8834
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.2748
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.7836
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.0692
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 0.4317
##
## (Intercept)
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])1
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])1
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])1
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])1 .
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])2
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])2
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])2
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])2
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])2
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])2
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])2
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])2
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])3
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])3
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])3
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])3 .
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])4
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])4
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])4
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])4
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])4
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])4
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])4
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])4
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])5
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])5
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])5
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])5 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])5
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])6
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])6
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])6
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])6
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])6
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])6
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])6
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])6
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])7
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])7
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])7
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 ***
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])7 .
## ns(x1, df = df_best_BIC_model_interact$df_1[1])1:ns(x2, df = df_best_BIC_model_interact$df_2[1])8
## ns(x1, df = df_best_BIC_model_interact$df_1[1])2:ns(x2, df = df_best_BIC_model_interact$df_2[1])8
## ns(x1, df = df_best_BIC_model_interact$df_1[1])3:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 .
## ns(x1, df = df_best_BIC_model_interact$df_1[1])4:ns(x2, df = df_best_BIC_model_interact$df_2[1])8
## ns(x1, df = df_best_BIC_model_interact$df_1[1])5:ns(x2, df = df_best_BIC_model_interact$df_2[1])8
## ns(x1, df = df_best_BIC_model_interact$df_1[1])6:ns(x2, df = df_best_BIC_model_interact$df_2[1])8
## ns(x1, df = df_best_BIC_model_interact$df_1[1])7:ns(x2, df = df_best_BIC_model_interact$df_2[1])8 .
## ns(x1, df = df_best_BIC_model_interact$df_1[1])8:ns(x2, df = df_best_BIC_model_interact$df_2[1])8
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2852 on 376 degrees of freedom
## Multiple R-squared: 0.7602, Adjusted R-squared: 0.7193
## F-statistic: 18.62 on 64 and 376 DF, p-value: < 2.2e-16
coefplot::coefplot(best_BIC_fit_interact) + theme_bw()
### interaction effects on the coarse grid
model.matrix( ~ ns(x1, df = df_best_BIC_model_interact$df_1[1]):ns(x2, df=df_best_BIC_model_interact$df_2[1]), train_df) %>%
as.data.frame() %>% tibble::as_tibble() %>%
select(-`(Intercept)`) %>%
tibble::rowid_to_column() %>%
left_join(coarse_grid %>% tibble::rowid_to_column(),
by = "rowid") %>%
tidyr::gather(key = "key", value = "value", -rowid, -x1, -x2) %>%
tidyr::separate(key,
c("left_word", "right_word"),
sep = ":",
fill = "right",
remove = FALSE) %>%
filter(!is.na(right_word)) %>%
tidyr::separate(left_word,
c("ns_x1_word", "x1_s_id"),
sep = "\\)",
remove = FALSE) %>%
tidyr::separate(right_word,
c("ns_x2_word", "x2_s_id"),
sep = "\\)",
remove = FALSE) %>%
ggplot(mapping = aes(x = x1, y = x2)) +
geom_raster(mapping = aes(fill = value)) +
facet_grid(x1_s_id ~ x2_s_id, labeller = "label_both") +
scale_fill_viridis_b() +
theme_bw()